package global

import (
	"context"
	"fly/core/auth/jwt"
	"github.com/beego/beego/v2/client/cache"
	"time"
)

// JwtAuth 暂不持久保存
var JwtAuth = jwt.New(nil)

// BmCache 全局缓存，保存1h
var BmCache, _ = cache.NewCache("memory", `{"interval":3600}`)

func GetCache[T any](key string, provider func() (T, error)) (T, error) {
	if ok, _ := BmCache.IsExist(context.TODO(), key); ok {
		cacheValue, err := BmCache.Get(context.TODO(), key)
		if d, yes := cacheValue.(T); yes && err == nil {
			return d, nil
		}
	} else {
		value, err := provider()
		if err == nil {
			err = BmCache.Put(context.TODO(), key, value, time.Hour)
		}
		return value, err
	}
	var t T
	return t, nil
}

func DelCache(key string) error {
	if ok, _ := BmCache.IsExist(context.TODO(), key); ok {
		return BmCache.Delete(context.TODO(), key)
	}
	return nil
}
